Struct কী?
রাস্টে struct (স্ট্রাকচার) একটি কাস্টম ডেটা টাইপ যা এক বা একাধিক ফিল্ড ধারণ করতে পারে। এটি একত্রে বিভিন্ন প্রপার্টি বা ভেরিয়েবল গ্রুপ করতে ব্যবহার করা হয়। স্ট্রাকচারগুলির মধ্যে মেথড ডিফাইন করা সম্ভব, যা স্ট্রাকচারের ডেটা বা ফিল্ডের সাথে কাজ করে।
Struct এ মেথড ডিফাইন করা
স্ট্রাকচারের জন্য মেথড ডিফাইন করার জন্য, আপনাকে একটি impl ব্লক ব্যবহার করতে হবে। impl ব্লক স্ট্রাকচারের জন্য মেথড এবং অ্যাসোসিয়েটেড ফাংশন সংজ্ঞায়িত করে।
মেথডের ডিফাইনেশন
স্ট্রাকচারের মেথড ডিফাইন করতে impl ব্লক ব্যবহার করা হয়, এবং মেথডের প্রথম প্যারামিটার হিসাবে &self ব্যবহার করা হয়। self হল স্ট্রাকচারের ইন্সট্যান্স (অথবা বস্তু) যা মেথডটিকে অ্যাক্সেস করতে সাহায্য করে।
উদাহরণ:
// স্ট্রাকচার ডিফাইন করা
struct Circle {
radius: f64,
}
// স্ট্রাকচারের মেথড ডিফাইন করা
impl Circle {
// মেথড যা 'self' ব্যবহার করে স্ট্রাকচারের ডেটা অ্যাক্সেস করে
fn area(&self) -> f64 {
3.14 * self.radius * self.radius
}
// মেথড যা 'self' ব্যবহার করে স্ট্রাকচারের ডেটা পরিবর্তন করতে সক্ষম
fn set_radius(&mut self, radius: f64) {
self.radius = radius;
}
}
fn main() {
let mut circle = Circle { radius: 5.0 }; // স্ট্রাকচার ইনস্ট্যান্স তৈরি
// মেথড কল করা
println!("Area: {}", circle.area()); // স্ট্রাকচারের 'area' মেথড ব্যবহার
circle.set_radius(10.0); // স্ট্রাকচারের 'set_radius' মেথড ব্যবহার
println!("New Area: {}", circle.area());
}মেথডের বিস্তারিত ব্যাখ্যা:
area(&self)মেথড:- এটি স্ট্রাকচারের
radiusফিল্ডের মান নিয়ে একটি হিসাব করে সার্কেলের এলাকা (area) রিটার্ন করে।&selfমানে এটি স্ট্রাকচারের অবস্থা (অথবা ডেটা) পড়তে পারে কিন্তু সেটি পরিবর্তন করতে পারে না (এটা immutable রেফারেন্স)।
- এটি স্ট্রাকচারের
set_radius(&mut self, radius: f64)মেথড:- এই মেথডটি স্ট্রাকচারের
radiusফিল্ড পরিবর্তন করতে সক্ষম। এখানে&mut selfব্যবহার করা হয়েছে, যার মানে হলো এই মেথডটি স্ট্রাকচারের অবস্থা পরিবর্তন করতে পারে (mutable রেফারেন্স)।
- এই মেথডটি স্ট্রাকচারের
Associated Functions (অ্যাসোসিয়েটেড ফাংশন)
স্ট্রাকচারে আপনি অ্যাসোসিয়েটেড ফাংশন (যা মেথড নয়, তবে স্ট্রাকচারের সাথে সম্পর্কিত) ডিফাইনও করতে পারেন। এগুলো সাধারণত স্ট্যাটিক ফাংশন হয় এবং self প্যারামিটার ব্যবহার করে না।
উদাহরণ:
impl Circle {
// অ্যাসোসিয়েটেড ফাংশন (যে কোন 'self' প্যারামিটার নেই)
fn new(radius: f64) -> Circle {
Circle { radius }
}
}
fn main() {
let circle = Circle::new(5.0); // অ্যাসোসিয়েটেড ফাংশন ব্যবহার
println!("Area: {}", circle.area());
}এখানে, new ফাংশনটি Circle স্ট্রাকচারের একটি নতুন ইনস্ট্যান্স তৈরি করে। এটি একটি অ্যাসোসিয়েটেড ফাংশন, কারণ এটি স্ট্রাকচারের সাথে সম্পর্কিত, কিন্তু এটি self প্যারামিটার ব্যবহার করে না।
সারাংশ
রাস্টে স্ট্রাকচারের মধ্যে মেথড ডিফাইন করতে impl ব্লক ব্যবহার করা হয়। মেথডগুলির প্রথম প্যারামিটার হিসেবে self ব্যবহার করে স্ট্রাকচারের ফিল্ড অ্যাক্সেস করা হয়, এবং আপনি যদি ফিল্ড পরিবর্তন করতে চান তবে &mut self ব্যবহার করতে হবে। এছাড়া, অ্যাসোসিয়েটেড ফাংশন গুলি self ছাড়া স্ট্রাকচারের সাথে সম্পর্কিত কার্যাবলী সম্পাদন করে।
Read more